﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QldtSdh.DAL.Models;

namespace QldtSdh.BLL
{
    public partial class BizGiangVien
    {
        /// <summary>
        /// Lấy danh sách giảng viên của đơn vị
        /// </summary>
        /// <returns></returns>
        public static List<GiangVien> GetListOfDonVi(string maDonViGUID, CEMS4UG_DHKHContext db = null)
        {
            if (db == null)
                using (var db2 = CEMS4UG_DHKHContext.GetContext()) { return GetListOfDonVi(maDonViGUID); }
            else
            {
                return db.GiangVienDbSet
                    .Where(e => e.MaDonVi == maDonViGUID)
                    .OrderBy(e => e.LaThinhGiang)
                    .OrderBy(e => e.Ten)
                    .ThenBy(e => e.HoDem).ToList();
            }
        }

        public static GiangVien GetByID2(string maGiangVien, CEMS4UG_DHKHContext db = null)
        {
            if (db == null)
                using (var db2 = CEMS4UG_DHKHContext.GetContext())
                    return GetByID2(maGiangVien, db2);
            else
            {
                return db.GiangVienDbSet.Where(e => e.MaGiangVien == maGiangVien).FirstOrDefault();
            }
        }

        /// <summary>
        /// Lấy danh sách giảng viên của 1 đơn vị có tham gia giảng dạy trong học kỳ cho trước
        /// </summary>
        /// <param name="cuaDonVi"></param>
        /// <param name="thamGiaDaoTaoTrongHocKy"></param>
        /// <returns></returns>
        internal static List<GiangVien> GetListGiangVien(DonVi cuaDonVi, HocKy thamGiaDaoTaoTrongHocKy, CEMS4UG_DHKHContext db = null)
        {
            if (db == null)
                using (var db2 = CEMS4UG_DHKHContext.GetContext())
                    return GetListGiangVien(cuaDonVi, thamGiaDaoTaoTrongHocKy, db2);
            else
            {
                // Tìm danh sách các lớp học phần trong học kỳ "thamGiaDaoTaoTrongHocKy"
                var hocKy = thamGiaDaoTaoTrongHocKy;
                var lstMaLopHocPhanGUID = db.LopHocPhanDbSet
                    .Where(e => e.MaHocKyGUID == hocKy.MaHocKyGUID)
                    .Select(e => e.MaLopHocPhanGUID)
                    .ToList();
                // Lấy về danh sách LopHocPhan_PhanCongGiangDay
                var lstMaGiangVien = db.LopHocPhan_PhanCongGiangDayDbSet.Include("GiangVien")
                    .Where(e => lstMaLopHocPhanGUID.Contains(e.MaLopHocPhanGUID))
                    .Select(e => e.MaGiangVien)
                    .Distinct()
                    .ToList();
                // Danh sách mã giảng viên thuộc đơn vị "cuaDonVi"
                var lstGiangVien = db.GiangVienDbSet
                    .Where(e => e.MaDonVi == cuaDonVi.MaDonViGUID && lstMaGiangVien.Contains(e.MaGiangVien))
                    .OrderBy(e => e.Ten)
                    .ThenBy(e => e.HoDem)
                    .ToList();
                return lstGiangVien;
            }
        }
    }

}
